//
//  Copyright (c) 2010, Novartis Institutes for BioMedical Research Inc.
//  All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
//       notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
//       copyright notice, this list of conditions and the following
//       disclaimer in the documentation and/or other materials provided
//       with the distribution.
//     * Neither the name of Novartis Institutes for BioMedical Research Inc.
//       nor the names of its contributors may be used to endorse or promote
//       products derived from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//

/************************************************************************/
/*                                                                      */
/*    File:           fixcharges.h                                      */
/*                                                                      */
/*    Purpose:        Declares the functions provided by the module     */
/*                    fixcharges.c.                                     */
/*                                                                      */
/************************************************************************/

extern char pKa_version[];

extern
int InitializeChargeDataTables(Fortran_FILE *fp);
/*
 * Initializes the own variables of the charge computation
 * module from file *fp.
 */

extern
void SetAcidityLimit(double limit);
/*
 * Sets the acidity limit for atoms considered to be available
 * for deprotonation.
 */

extern
int SetpKaValues(struct reaccs_molecule_t *mp);
/*
 * Estimates the pKa value of acidic atoms in molecule *mp and sets
 * the 'value' fields to this value.
 * It returns TRUE if all went well and FALSE otherwise.
 */

extern
int RechargeMolecule(struct reaccs_molecule_t *mp,
               int desired_charge,
                     int *ndeprot, int *nrefine);
/*
 * Removes hydrogens from *mp until desired_charge is reached. The
 * positions for hydrogen removal are selected by "acidity" combined
 * with a refinement algorithm. It returns TRUE if molecule could be
 * neutralized and FALSE if any problem were encountered.
 * *ndeprot and *nrefine are set to the number of deprotonations
 * and refinement cycles performed.
 */

void PrintChargeHeader();
void SetChargeLog(FILE *logfile);
void SetChargeMessage(char *message);

